const Book = require('../models/Book')

/**
 * 创建书籍
 * POST /api/books
 */
exports.createBook = async (req, res) => {
	try {
		// 从请求体中获取数据并创建书籍
		const book = await Book.create(req.body)
		res.status(200).json({
			message: '创建成功',
			status: 200,
			data: book
		})
	} catch (err) {
		res.status(500).json({ error: err.message })
	}
}

/**
 * 获取书籍列表（分页）
 * GET /api/books
 */
exports.getAllBooks = async (req, res) => {
	// 从查询参数获取分页设置
	const page = parseInt(req.query.page) || 1
	const limit = parseInt(req.query.limit) || 10
	const skip = (page - 1) * limit

	try {
		// 查询数据库，获取指定页的数据
		const books = await Book.find().skip(skip).limit(limit)
		// 获取总文档数用于分页信息
		const total = await Book.countDocuments()
		// 返回分页结果
		res.status(200).json({
			message: '获取成功',
			status: 200,
			data: {
				total,
				size: limit,
				current: page,
				books
			}
		})
	} catch (err) {
		res.status(500).json({ error: err.message })
	}
}

/**
 * 获取单本书籍
 * GET /api/books/:id
 */
exports.getBookById = async (req, res) => {
	try {
		const book = await Book.findById(req.params.id)
		if (!book) return res.status(404).json({ error: '书籍未找到' })
		res.status(200).json({
			message: '获取成功',
			status: 200,
			data: book
		})
	} catch (err) {
		res.status(500).json({ error: err.message })
	}
}

/**
 * 更新书籍
 * PUT /api/books/:id
 */
exports.updateBook = async (req, res) => {
	try {
		const book = await Book.findByIdAndUpdate(req.params.id, req.body, {
			new: true,
			runValidators: true
		})
		if (!book) return res.status(404).json({ error: '书籍未找到' })
		res.status(200).json({
			message: '更新成功',
			status: 200,
			data: book
		})
	} catch (err) {
		res.status(500).json({ error: err.message })
	}
}

/**
 * 删除书籍
 * DELETE /api/books/:id
 */
exports.deleteBook = async (req, res) => {
	try {
		const book = await Book.findByIdAndDelete(req.params.id)
		if (!book) return res.status(404).json({ error: '书籍未找到' })
		res.status(200).json({ message: '书籍删除成功' })
	} catch (err) {
		res.status(500).json({ error: err.message })
	}
}
